<!doctype html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/utils.js"></script>
<script src="/shared-storage/resources/util.js"></script>
<script src="/private-aggregation/resources/util.js"></script>
<script src="/fenced-frame/resources/utils.js"></script>

<body>
<script>
'use strict';

promise_test(async () => {
  await addModuleOnce("/private-aggregation/resources/private-aggregation-helper-module.js");

  const privateAggregationConfig = {};

  await sharedStorage.run("contribute-to-histogram",
                          {privateAggregationConfig, keepAlive: true});
}, 'no filtering ID max bytes');

promise_test(async () => {
  await addModuleOnce("/private-aggregation/resources/private-aggregation-helper-module.js");

  const privateAggregationConfig = {
    filteringIdMaxBytes: 1,
  };

  await sharedStorage.run("contribute-to-histogram",
                          {privateAggregationConfig, keepAlive: true});
}, 'explicit default filtering ID max bytes');

promise_test(async () => {
  await addModuleOnce("/private-aggregation/resources/private-aggregation-helper-module.js");

  const privateAggregationConfig = {
    filteringIdMaxBytes: 8,
  };

  await sharedStorage.run("contribute-to-histogram",
                          {privateAggregationConfig, keepAlive: true});
}, 'max filtering ID max bytes');

promise_test(async (test) => {
  await addModuleOnce("/private-aggregation/resources/private-aggregation-helper-module.js");

  const privateAggregationConfig = {
    filteringIdMaxBytes: 9,
  };

  return promise_rejects_dom(
      test, "DataError",
      sharedStorage.run("contribute-to-histogram",
                        {privateAggregationConfig, keepAlive: true}));
}, 'too big filtering ID max bytes');

promise_test(async (test) => {
  await addModuleOnce("/private-aggregation/resources/private-aggregation-helper-module.js");

  const privateAggregationConfig = {
    filteringIdMaxBytes: 0,
  };

  return promise_rejects_dom(
      test, "DataError",
      sharedStorage.run("contribute-to-histogram",
                        {privateAggregationConfig, keepAlive: true}));
}, 'zero filtering ID max bytes');

promise_test(async (test) => {
  await addModuleOnce("/private-aggregation/resources/private-aggregation-helper-module.js");

  const privateAggregationConfig = {
    filteringIdMaxBytes: -1,
  };

  return promise_rejects_js(
      test, TypeError,
      sharedStorage.run("contribute-to-histogram",
                        {privateAggregationConfig, keepAlive: true}));
}, 'negative filtering ID max bytes');

promise_test(async (test) => {
  await addModuleOnce("/private-aggregation/resources/private-aggregation-helper-module.js");

  const privateAggregationConfig = {
    filteringIdMaxBytes: 3n,
  };

  return promise_rejects_js(
      test, TypeError,
      sharedStorage.run("contribute-to-histogram",
                        {privateAggregationConfig, keepAlive: true}));
}, 'wrong type filtering ID byte size');

</script>
</body>
